package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.constant.MessageConstant;
import com.itheima.dao.CheckGroupDao;
import com.itheima.entity.PageResult;
import com.itheima.pojo.CheckGroup;
import com.itheima.pojo.CheckItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service(interfaceClass = CheckGroupService.class)
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService{
    @Autowired
    private CheckGroupDao checkGroupDao;
    /**
     *
     *
     *    插入检查组别表和中间表
     */
    @Override
    public void add(CheckGroup checkGroup, Integer[] checkitemIds) {
        //1.数据插入组别表
        checkGroupDao.add(checkGroup);
        //2.插入中间表
        this.setCheckGroupAndCheckItem(checkGroup.getId(),checkitemIds);
    }
@Override
    public void  setCheckGroupAndCheckItem(Integer checkGroupId, Integer[] checkitemIds){
        if (checkitemIds.length>0){
            for (Integer checkitemId:checkitemIds){
                Map<String,Integer> map = new HashMap<>();
                map.put("checkgroup_id",checkGroupId);
                map.put("checkitem_id",checkitemId);
                checkGroupDao.setCheckGroupAndCheckItem(map);
            }
        }
    }

    /**
     *
     *   分页查询
     */
    @Override
    public PageResult finPage(Integer currentPage, Integer pageSize, String queryString) {
        PageHelper.startPage(currentPage,pageSize );
        if (queryString ==null){
            queryString="";
        }
        Page<CheckGroup> page = checkGroupDao.queryByCondition("%"+queryString+"%");
        return  new PageResult(page.getTotal(),page.getResult());

//        PageHelper.startPage(currentPage,pageSize);
//        Page<CheckGroup> page = checkGroupDao.queryByCondition(queryString);
//        return new PageResult(page.getTotal(),page.getResult());
    }

    /**
     *   根据id 发送异步请求查看检查组
     * @param id
     * @return
     */
    @Override
    public CheckGroup findGroupById(Integer id) {
        return checkGroupDao.findGroupById(id);
    }


    /**
     * 根据检查组id--检查项目勾选
     *
     *
     */
    @Override
    public List<Integer> finCheckItemIdByCheckGroup(Integer id) {
      return checkGroupDao.finCheckItemIdByCheckGroup(id);
    }

    /**
     * 跟新检查组信息--基本信息,勾选检查项目
     * @param
     * @param checkGroup
     */
    @Override
    public void edit(Integer[]checkitemIds,CheckGroup checkGroup) {
//        1.跟新基本信息
        checkGroupDao.updateDataBaseCheckGroup(checkGroup);
//        2.删除中间表信息
        checkGroupDao.deleteRelationCheckItemAndCheckGroup(checkGroup.getId());
//        3.建立中间表关系
        setCheckGroupAndCheckItem(checkGroup.getId(),checkitemIds);
    }

    /**
     * 删除检查组信息
     * @param id
     */
    @Override
    public void deleteGroup(Integer id) throws RuntimeException {
//     1. 先检查检查组和检查套餐有无绑定
        int count=checkGroupDao.findGroupIdInMiddle(id);
        if (count>0){
            throw new RuntimeException(MessageConstant.DELETE_CHECKGROUP_FAIL);
        }
//     2. 删除中间表
        checkGroupDao.deleteRelationCheckItemAndCheckGroup(id);
//     3.删除组别表
        checkGroupDao.deleteGroup(id);
    }

    /**
     *  查看全部检查组
     * @return
     */
    @Override
    public List<CheckGroup> findAllGroup() {
        return  checkGroupDao.findAllGroup();
    }
}
